Trong các bài học trước, chúng ta đã tập trung vào các thao tác phần tử (ví dụ như một hàm ReLU đơn giản trên một ma trận). Những thao tác này là giới hạn bởi bộ nhớ vì GPU dành nhiều thời gian hơn để di chuyển dữ liệu từ HBM vào các thanh ghi so với việc thực hiện các phép toán.
1. Tại sao GEMM lại quan trọng?
Phép nhân ma trận tổng quát (GEMM) có độ phức tạp tính toán là $O(N^3)$ trong khi chỉ yêu cầu truy cập bộ nhớ $O(N^2)$. Điều này cho phép chúng ta che giấu độ trễ truy cập bộ nhớ đằng sau năng lực xử lý số học khổng lồ, biến nó thành "tim đập" của các mô hình ngôn ngữ lớn (LLMs).
2. Cách biểu diễn bộ nhớ 2 chiều
RAM vật lý là 1 chiều. Để biểu diễn một ten-xơ 2 chiều, chúng ta sử dụng độ bước. Một lỗi phổ biến trong sản xuất là giả định rằng một ten-xơ là liên tục. Nếu bạn nhầm lẫn giữa độ bước hàng và độ bước cột trong phép toán con trỏ, bạn sẽ truy cập vào dữ liệu "ảo" hoặc gây ra vi phạm bộ nhớ.
3. Tổng quát hóa theo khối
Triton tổng quát hóa logic thao tác phần tử bằng cách chuyển từ một con trỏ đơn sang những khối con trỏ. Bằng cách sử dụng các khối 2 chiều (ví dụ: $16 \times 16$), chúng ta tận dụng việc tái sử dụng dữ liệu trong SRAM tốc độ cao, giữ dữ liệu ở trạng thái "nóng" để thực hiện các thao tác ghép nối như cộng bias hoặc kích hoạt trước khi ghi lại vào bộ nhớ toàn cục.